iT邦幫忙

DAY 30
1

Android 探索之備忘錄系列 第 30

Android 探索之備忘錄 [Day30-ANR]

  • 分享至 

  • xImage
  •  

最後一篇來說一下ANR

ANR全名是(Application Not Responding), 意思就是說目前app因為正在做某件事情耗費太多時間沒有回應,
這時系統會跳出對話框告訴使用者是否要繼續等待或是關閉

如下圖


Android定義了兩種會觸發ANR的時機

  1. 當使用者的輸入事件(如觸控)超過5秒沒有反應
  2. 當BroadcastReceiver收到intent後, 超過10秒還沒結束onReceive()

而根據debug的經驗, 要是使用broadcast intent

也可能會因為目前的broadcast太多而在BroadcastQueue排隊等太久觸發ANR

因此雖然broadcast intent方便好用但卻是有可能造成系統不順暢的元凶之一!

還是盡量少用為上

基本上要避免ANR就是把可能會耗時的工作放在非UI thread,
方法可以是Message-Handler + Thread, AsyncTask 或是Service等一些非同步的方式

並適當的告知使用者目前正在運行需等待的工作如使用ProgressBar.

最後, T-Shirt鍊成!


上一篇
Android 探索之備忘錄 [Day29-startLockTask]
系列文
Android 探索之備忘錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言